// TODO:对象
// 对象也是一种数据类型,即:object
// 对象的声明语法:
// 字面量方式: let 对象名 = { 属性名:属性值,..... }
// new方式: let 对象名 = new Object({ 属性名:属性值,.... });
// 注意:
// 对象中属性名,可以加引号,也可以不加,通常是不会加的,
// 特殊情况: 属性名特殊,如:属性名中有空格,中横线等等
// 如:
let obj = {
    name: "张三",
    age: 18
}
// 特殊情况:
let obj02 = {
    "my-name": "张三",
    "my Age": 18
}


// TODO：对象分类
// 内置对象：由ES标准中定义的对象，如：Math、String、Number等
// 宿主对象：由JS的运行环境提供的对象，目前来说主要是指浏览器提供的对象
// 如：DOM、BOM
// 自定义对象：由开发人员自己定义的对象



// TODO: 对象中的属性
// 对象使用:
// 对象名.属性: 获取对应属性值
// 如:
let name = obj.name;
// 特殊情况调用属性使用
// 特殊的属性,调用必须使用["属性名"]的方式调用,无法使用对象名.属性名调用
let myName = obj02["my-name"];
// 正常的属性,也可以通过["属性名"]的方式调用
// 使用["属性名"]的方式调用属性,必须要用引号包裹属性名
let age = obj["age"];
// 注意：当我们使用了一个对象中不存在的属性，程序不会报错，而是会返回undefined
// 如：
console.log(obj.test);

// 属性值修改:
// 对象名.属性名 = 新值

// 对象新增属性
// 对象名.新增属性名 = 属性值
// 如:
obj.address = "福建泉州";

// 删除对象属性
// delete 对象名.属性名: 不推荐使用,了解即可,严格模式下不允许这样删除对象属性


// TODO：判断属性是否在对象中存在
// 语法："属性名" in 对象;
// 返回值：boolean
// 注意：对象中不存在该属性，但原型对象上存在该属性，也是会返回true
// 如果想判断，对象自身中是否指定的属性（不检查原型对象）时，
// 可以使用hasOwnPrototype()
// 返回值：boolean
// 语法：对象.hasOwnprototype(属性名);




// TODO: 对象中的方法
// 对象中的方法
// 方法就是函数,只不过在对象内被叫做方法
let obj03 = {
    song: function () { console.log("唱歌"); }
}
// 调用方法: 对象名.方法名();
// 方法与属性用法全都一致,区别在于属性值一个是普通值,一个是函数
// 属性能使用的语法,可以在方法中使用,比如: 添加,删除,查找属性


// TODO:遍历对象
// 语法:
// for(let 变量名 in 对象名) {}
// let 变量名是一个临时变量,存储对象的属性名
// 如:
for (let key in obj) {
    // 注意: key用于接收属性名,且此时获取到的属性名是"字符串"类型的
    // 如: "name" "age"
    // 所以,此时不能使用: 对象名.属性名了
    // 如: obj."name",这样写是不合法的
    // 合法: obj.name,不能""的
    // 所以遍历对象,获取属性值时,只能用 对象名["属性名"]的方式来获取
    console.log(key);   // 属性名
    console.log(obj[key]);  // 属性值
}


// TODO: 内置对象
// 1. Math
// 介绍: Math对象是JS提供的一个 "数学" 对象
// 作用: 提供了一些列做数学运算的方法
// Math对象中常用的数学方法:
/**
 *  a. random: 生成随机数(0-1之间,包括0不包括1)
 *  b. ceil: 向上取整
 *  c. floor: 向下取整
 *  d. max: 找最大值
 *  e. min: 找最小值
 *  f. pow: 幂运算
 *  g. abs: 绝对值
 */
// 具体用法: MDN搜索 Math对象查看
